<?php

class ReportItem {
  
  private $lines;
  private $links;
  private $linksListTag;
  private $ifNull;
  private $id;
  
  public function __construct($ifNull = "", $id = null, $ordered = false) {
    $this->lines = array();
    $this->links = array();
    $this->linksListTag = $ordered ? "ol" : "ul";
    $this->ifNull = $ifNull;
    $this->id = $id;
  }
  
  /**
   * Adiciona um link ao item.
   * 
   * @param type $text O texto do item.
   * @param type $href A url ao qual ele leva.
   */
  public function addLink($text, $href) {
    $this->links[] = "<li><a href='${href}'>" . htmlentities($text) . "</a></li>" ;
  }
  
  /**
   * As linhas serão inseridas dentro de uma tag p.
   * @param type $line A linha a ser inserida no item.
   */
  public function addLine($key, $value) {
    if($value === null) {
      $this->lines[] = "<p class='unspecified'><span class='key'>" . htmlentities(strval($key)) . "</span>: <span class='value'>" . htmlentities(strval($this->ifNull)) . "</span></p>";
    }
    else {
      $this->lines[] = "<p><span class='key'>" . htmlentities(strval($key)) . "</span>: <span class='value'>" . htmlentities(strval($value)) . "</span></p>";
    }
  }
  
  /**
   * O item será inserido dentro de uma tag div com a classe ListItem. O item tem o seguinte formato: vários parágrafos
   * com as linhas e vários links (em uma lista), nessa ordem especificada.
   * 
   * @return type O html do item.
   */
  public function getHtml() {
    return "<div " . ($this->id !== null ? "id='" . $this->id . "' " : '') . "class='ReportItem'>".
            (count($this->lines) !== 0 ? implode("", $this->lines) : "") .
            "<div style='clear:both'></div>" .
            (count($this->links) !== 0 ? ("<" . $this->linksListTag . ">" .
                                          implode("", $this->links) .
                                          "</" . $this->linksListTag . ">") : "") .
            "<div style='clear:both'></div></div>"; 
  }
}
